package bombita.modelo.Mapa;

import java.awt.Point;
import java.util.List;

import ar.uba.fi.algo3.titiritero.Posicionable;
import bombita.modelo.CosaDelMapa;
import bombita.modelo.CosaDelMapaSincronica;

public class TokenMapa implements Posicionable
{
	//son default asi solo se puede acceder desde Mapa
	Mapa mapa;
	CosaDelMapa entidad;
	Point posicion;
	
	public TokenMapa (Mapa mapaAsociado, CosaDelMapa dueno, Point posicion)
	{
		mapa = mapaAsociado;
		entidad = dueno;
		this.posicion = posicion; 
	}

	public void agregar (CosaDelMapaSincronica entidad, Vector2D deltaPosicion) throws PosicionFueraDeMapaException
	{
		mapa.reconocerSincronico(entidad, deltaPosicion.sumar(posicion));
	}

	public void agregar (CosaDelMapaSincronica entidad)
	{
		try {
			mapa.reconocerSincronico(entidad, this.posicion);
		} catch (PosicionFueraDeMapaException e) {}
	}

	public void reposicionar (Vector2D deltaPosicion) throws PosicionFueraDeMapaException
	{
		mapa.reposicionar(this.entidad, deltaPosicion.sumar(this.posicion));
	}

	public List<CosaDelMapa> cosasEnPosicion (Vector2D deltaPosicion) throws PosicionFueraDeMapaException
	{
		return mapa.cosasEnPosicion(deltaPosicion.sumar(this.posicion));
	}
	
	public void remover ()
	{
		mapa.remover(this.entidad);
	}
	
	public boolean esPosicionValida (Vector2D deltaPosicion)
	{
		return !mapa.fueraDeMapa(deltaPosicion.sumar(this.posicion));
	}

	@Override
	public int getX()
	{
		return posicion.x;
	}

	@Override
	public int getY()
	{
		return posicion.y;
	}

	public void terminarJuego(boolean esGanado)
	{
		mapa.terminarJuego(esGanado);
	}

	public boolean estaLiberado()
	{
		return mapa.estaLiberado();
	}
}
